﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web.Mvc;
using ProyectoTerminalRetiro.Models;
using ProyectoTerminalRetiro.Clases;
using System.Data.Entity.Validation;


namespace ProyectoTerminalRetiro.Controllers.AdmEmpresaDestino
{
    public class MicroController : Controller
    {


        #region "Atributos"

        private ContextoDatos db = new ContextoDatos();

        #endregion

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }



        #region "Metodos privados"

        //private static void CargarRespuestaConElMicroAsociadoYElDestinoAsociado(ProyectoTerminalRetiro.Clases.Request request, Respuesta respuestaADevolver, ConsultorDestino consultorDestino)
        //{
        //    Destino destinoADevolver = consultorDestino.ObtenerDestinoConId(request.Destino.id);
        //    ConsultorMicro consultorMicro2 = new ConsultorMicro();
        //    Micro microEnBd = consultorMicro2.ObtenerMicroConCodigo(request.Micro.Codigo);


        //    Destino destionoFinal = new Destino();
        //    destionoFinal.Nombre = destinoADevolver.Nombre;

        //    Micro microFinal = new Micro();
        //    microFinal.Codigo = request.Micro.Codigo;
        //    microFinal.id = microEnBd.id;

        //    respuestaADevolver.Mensaje = "El micro se guardo correctamente";
        //    respuestaADevolver.AgregarDestinoALaRespuesta(destionoFinal);
        //    respuestaADevolver.AgregarMicroALaRespuesta(microFinal);
        //}

        //private static void TratarDeAsociarMicroAUnaEmpresaYDestino(ProyectoTerminalRetiro.Clases.Request request, Respuesta respuestaADevolver)
        //{
        //    ConsultorEmpresa consultorEmpresarial = new ConsultorEmpresa();
        //    ConsultorDestino consultorDestino = new ConsultorDestino();
        //    bool existeEmpresa = consultorEmpresarial.existeEmpresaConId(request.Empresa.id);
        //    bool existeDestino = consultorDestino.ExisteDestinoConId(request.Destino.id);

        //    if (existeDestino && existeEmpresa)
        //    {
        //        ConsultorMicro consultorMicros = new ConsultorMicro("Parametros.xml");
        //        if (consultorMicros.guardarNuevoMicro(request.Micro.Codigo, request.Empresa.id, request.Destino.id))
        //        {
        //            CargarRespuestaConElMicroAsociadoYElDestinoAsociado(request, respuestaADevolver, consultorDestino);
        //        }
        //        else
        //        {
        //            respuestaADevolver.Mensaje = "No se pudo guardar el micro";
        //        }
        //    }
        //    else
        //    {
        //        respuestaADevolver.Mensaje = "No existe empresa asociada o destino asociado";
        //    }
        //}
        
        private static void LlenarRespuestaAlDarAltaMicro(ProyectoTerminalRetiro.Clases.Request request, Respuesta respuestaADevolver)
        {
            ConsultorMicro consultorMicro = new ConsultorMicro();
            if (consultorMicro.existeMicroConCodigo(request.Micro.Codigo))
            {
                respuestaADevolver.Mensaje = "Ya existe el micro con el codigo " + request.Micro.Codigo;
            }
            else
            {
                TratarDeAsociarMicroAUnaEmpresaYDestino(request, respuestaADevolver);
            }
        }

        //private Respuesta CargarRespuestaAlEliminarMicro(ProyectoTerminalRetiro.Clases.Request request)
        //{
        //    Respuesta respuestaADevolver = new Respuesta();
        //    ConsultorMicro consultorMicro = new ConsultorMicro();

        //    if (!consultorMicro.existeMicroConId(request.Micro.id))
        //    {
        //        respuestaADevolver.Mensaje = "Nada para borrar: el micro no existia";
        //    }
        //    else
        //    {
        //        Micro microEnDb = consultorMicro.ObtenerMicroConId(request.Micro.id);
        //        this.DeleteConfirmed(request.Micro.id);
        //        Micro microFinal = new Micro();
        //        microFinal.id = request.Micro.id;
        //        microFinal.Codigo = microEnDb.Codigo;
        //        respuestaADevolver.Mensaje = "El micro se borro correctamente";
        //        respuestaADevolver.AgregarMicroALaRespuesta(microFinal);
        //    }
        //    return respuestaADevolver;
        //}

        //private static void CargarRespuestaAlEditarMicro(ProyectoTerminalRetiro.Clases.Request request, Respuesta respuestaADevolver)
        //{
        //    ConsultorMicro consultorMicro = new ConsultorMicro("Parametros.xml");
        //    if (consultorMicro.existeMicroConCodigoYconIdDiferente(request.Micro.Codigo, request.Micro.id))
        //    {
        //        respuestaADevolver.Mensaje = "Ya existe el micro con el codigo " + request.Micro.Codigo;

        //    }
        //    else
        //    {
        //        //  No funciona con EF por el tema de las referencias
        //        //this.Edit(request.Micro);
        //        if (!consultorMicro.ActualizarDatosDelMicroConId(idMicroParaActualizar: request.Micro.id, idDestinonuevo: request.Destino.id, idNuevoCodigo: request.Micro.Codigo))
        //        {
        //            respuestaADevolver.Mensaje = "Problemas al tratar de guardar cambios en el micro";
        //        }
        //        else
        //        {
        //            respuestaADevolver.Mensaje = "El micro se actualizo correctamente";
        //            respuestaADevolver.AgregarMicroALaRespuesta(request.Micro);
        //        }
        //    }
        //}
    
        #endregion


        #region "Metodos publicos"

        //
        // GET: /Micro/

        public ActionResult Index()
        {
            return View(db.Micros.ToList());
        }

        //
        // GET: /Micro/Details/5

        public ActionResult Details(int id = 0)
        {
            Micro micro = db.Micros.Find(id);
            if (micro == null)
            {
                return HttpNotFound();
            }
            return View(micro);
        }

        //
        // GET: /Micro/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        // POST: /Micro/Create

        //[HttpPost]
        //public ActionResult Create(Micro micro)
        //{
        //    if (ModelState.IsValid)
        //    {
        //        db.Micros.Add(micro);
        //        db.SaveChanges();
        //        return RedirectToAction("Index");
        //    }

        //    return View(micro);
        //}

        //
        // GET: /Micro/Edit/5

        public ActionResult Edit(int id = 0)
        {
            Micro micro = db.Micros.Find(id);
            if (micro == null)
            {
                return HttpNotFound();
            }
            Respuesta respuestaADevolver = new Respuesta();
            respuestaADevolver.AgregarMicroALaRespuesta(micro);
            respuestaADevolver.SetarDestinos(db.Destinos.ToList());


            return View(respuestaADevolver);
        }

        //
        // POST: /Micro/Edit/5

        //[HttpPost]
        //public ActionResult Edit(Micro micro)
        //{
        //    if (ModelState.IsValid)
        //    {
        //        db.Entry(micro).State = EntityState.Modified;
        //        db.SaveChanges();
        //        return RedirectToAction("Index");
        //    }
        //    return View(micro);
        //}

        ////
        // GET: /Micro/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Micro micro = db.Micros.Find(id);
            if (micro == null)
            {
                return HttpNotFound();
            }
            return View(micro);
        }

        //
        // POST: /Micro/Delete/5


        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Micro micro = db.Micros.Find(id);
            db.Micros.Remove(micro);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        public ActionResult DarAtlaMicro(ProyectoTerminalRetiro.Clases.Request request)
        {
            Respuesta respuestaADevolver = new Respuesta();

            if (string.IsNullOrEmpty(request.Micro.Codigo))
            {
                respuestaADevolver.Mensaje = "No debe haber campos vacios";
            }
            else
            {
                LlenarRespuestaAlDarAltaMicro(request, respuestaADevolver);
            }
            return Json(respuestaADevolver, JsonRequestBehavior.AllowGet);
        }

        public ActionResult EliminarMicro(ProyectoTerminalRetiro.Clases.Request request)
        {
            Respuesta respuestaADevolver = CargarRespuestaAlEliminarMicro(request);
            return Json(respuestaADevolver, JsonRequestBehavior.AllowGet);
        }

        public ActionResult EditarMicro(ProyectoTerminalRetiro.Clases.Request request)
        {
            Respuesta respuestaADevolver = new Respuesta();
            if (string.IsNullOrEmpty(request.Micro.Codigo))
            {
                respuestaADevolver.Mensaje = "No debe haber campos vacios";
            }
            else
            {
                CargarRespuestaAlEditarMicro(request, respuestaADevolver);
            }

            return Json(respuestaADevolver, JsonRequestBehavior.AllowGet);
        }

        #endregion

        






        
    }


}